package com.malou.client.ventas.ingresostock;

import java.util.Date;

import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.StoreEvent;
import com.extjs.gxt.ui.client.store.StoreListener;
import com.extjs.gxt.ui.client.widget.Component;
import com.extjs.gxt.ui.client.widget.Dialog;
import com.extjs.gxt.ui.client.widget.Status;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.HiddenField;
import com.extjs.gxt.ui.client.widget.form.NumberField;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem;
import com.google.gwt.core.client.GWT;
import com.malou.client.MalouConstants;
import com.malou.client.util.Utilities;

public class IngresoStockDialog extends Dialog {
	public  HiddenField<String> modeloprenda_id;
	public  TextField<String> modeloprenda;
	private NumberField cantidad;
	private ComboBox<BeanModel> proveedor;
	private Button guardar;
	private Button cancelar;
	public  Status status;
	private FormPanel panel;

	IngresoStock ins;
	private MalouConstants constants = GWT.create(MalouConstants.class);

	public IngresoStockDialog() {
		super();
		setModal(true);
		setSize(350, 160);
		setButtons("");
		setResizable(false);
		setIconStyle("icon-stock");
		setHeading(constants.stockIngresoStock());

		panel = new FormPanel();
		panel.setBorders(false);
		panel.setBodyBorder(false);
		panel.setPadding(5);
		panel.setHeaderVisible(false);
		panel.setLabelWidth(100);

		addFields();

		setFocusWidget(proveedor);

		Component comp[]={proveedor,cantidad,guardar};
		Utilities.Enter(comp);
	}

	@Override
	protected void createButtons() {
		super.createButtons();

		if (constants == null) {
			constants = GWT.create(MalouConstants.class);
		}

		status = new Status();
		status.setBusy(constants.guardando());
		status.hide();
		status.setAutoWidth(true);
		getButtonBar().add(status);

		getButtonBar().add(new FillToolItem());

		cancelar = new Button(constants.cancelar());

		cancelar.addSelectionListener(new SelectionListener<ButtonEvent>() {
			public void componentSelected(ButtonEvent ce) {
				IngresoStockDialog.this.hide();
			}

		});

		guardar = new Button(constants.guardar());

		guardar.addSelectionListener(new SelectionListener<ButtonEvent>() {
			public void componentSelected(ButtonEvent ce) {
				if (validate()) {
					status.show();
					

					ins = new IngresoStock();

					if (proveedor.getValue().get("id") != null)
						ins.setProveedor_id(Integer.valueOf(proveedor
								.getValue().get("id").toString()));
					ins.setFecha(new Date());
					ins.setModeloprenda_id(Integer.valueOf(modeloprenda_id
							.getValue().toString()));

					if (Utilities.hasValue(cantidad))
						ins.setCantidad(Integer.valueOf(cantidad.getValue()
								.toString()));

					IngresoStocks.ingresoStockDialog = IngresoStockDialog.this;
					IngresoStocks.save(ins);
				}

			}
		});

		addButton(guardar);
		addButton(cancelar);

	}

	private boolean validate() {
		boolean can = cantidad.isValid();
		boolean prv = proveedor.isValid();
		return can && prv;
	}

	public void reset() {

		modeloprenda_id.clear();
		modeloprenda.clear();
		cantidad.clear();

		status.hide();
		
	}

	private void addFields() {

		modeloprenda_id = new HiddenField<String>();
		modeloprenda_id.setVisible(false);
		panel.add(modeloprenda_id);

		IngresoStocks.getComboProveedores();

		proveedor = new ComboBox<BeanModel>();
		proveedor.setFieldLabel(constants.stockProveedor());
		proveedor.setDisplayField("razonsocial");
		proveedor.setEmptyText("Seleccione...");
		proveedor.setMinChars(0);
		proveedor.setStore(IngresoStocks.storeProveedor);
		proveedor.setTypeAhead(true);
		proveedor.setTriggerAction(TriggerAction.ALL);
		proveedor.setValueField("razonsocial");
		proveedor.setAllowBlank(false);
		proveedor.setUseQueryCache(false);
		proveedor.addListener(Events.Expand, new Listener<BaseEvent>() {
			@Override
			public void handleEvent(BaseEvent be) {
				proveedor.clearSelections();
			}

		});
		proveedor.getStore().addStoreListener(new StoreListener<BeanModel>() {
			public void storeDataChanged(StoreEvent<BeanModel> se) {
				proveedor.getStore().filter("razonsocial", proveedor.getRawValue());
			}
		});
		
		
		panel.add(proveedor, new FormData("95%"));

		modeloprenda = new TextField<String>();
		modeloprenda.setFieldLabel(constants.ventaModeloPrenda());
		modeloprenda.setReadOnly(true);
		panel.add(modeloprenda, new FormData("95%"));

		cantidad = new NumberField();
		cantidad.setFieldLabel(constants.stockCantidad());
		cantidad.setAllowNegative(false);
		cantidad.setAllowBlank(false);
		cantidad.setAllowDecimals(false);
		cantidad.setPropertyEditorType(Integer.class);
		panel.add(cantidad, new FormData("50%"));
		add(panel);

	}
}
